package Controlador;


import java.util.Random;

import javax.swing.ImageIcon;

public class ModoJuego {

	private static int turno = 0;
	ImageIcon iconO=new ImageIcon(".\\src\\res\\O.png");

	// Modo de juego 1 = Humano vs pc. 2 = Humano vs Humano
	private static int modoDeJuego = 0;

	
	//constructor y get and set del modo de juego
	public ModoJuego(int modo) {
		ModoJuego.setModoDeJuego(modo);
	}

	public static int getModoDeJuego() {
		return modoDeJuego;
	}

	public static void setModoDeJuego(int modoDeJuego) {
		ModoJuego.modoDeJuego = modoDeJuego;
	}

	public void jugar() 
	{
		switch (modoDeJuego) 
		{
		
		case 1:
			// Humano vs maquina
			ModoJuego.setTurno(2);
			break;
		
		case 2:
			// Humano vs Humano
			ModoJuego.setTurno(1);
			break;
		}
	}

	public static int getTurno() {
		return turno;
	}

	public static void setTurno(int turno) {
		ModoJuego.turno = turno;
	}

	/**
	 * Metodo para uqe la maquina eliga una casilla al azar 
	 * y la pulse en su turno
	 * @param lista lista de botones que puede pulsar
	 */
	public void turnoMaquina(Botones[] lista) 
	{
		Random rand = new Random();
		boolean seguir = true;
		
		while (seguir) 
		{
			Botones aux = lista[rand.nextInt(9)];
			
			if (aux.isVacio()) 
			{
				aux.setIcon(iconO);
				seguir = false;
			}
		}
	}

	/**
	 * Metodo para comprobar el ganador comprobando 
	 * filas columnas y diagonales
	 * @param botones lista de botones a comprobar 
	 * @return string que contiene el ganador para imprimir en la ventana
	 */
	public String comprobarGanadorJugador(Botones[] botones) {
		String ganador = "";

		//filas
		int fil1 = botones[0].getNumero() + botones[1].getNumero()
				+ botones[2].getNumero();
		
		int fil2 = botones[3].getNumero() + botones[4].getNumero()
				+ botones[5].getNumero();
		
		int fil3 = botones[6].getNumero() + botones[7].getNumero()
				+ botones[8].getNumero();

		//columnas
		int col1 = botones[0].getNumero() + botones[3].getNumero()
				+ botones[6].getNumero();
		
		int col2 = botones[1].getNumero() + botones[4].getNumero()
				+ botones[7].getNumero();
		
		int col3 = botones[2].getNumero() + botones[5].getNumero()
				+ botones[8].getNumero();

		//diagonales
		int diag1 = botones[0].getNumero() + botones[4].getNumero()
				+ botones[8].getNumero();
		int diag2 = botones[2].getNumero() + botones[4].getNumero()
				+ botones[6].getNumero();

		
		if (fil1 == 3 || fil2 == 3 || fil3 == 3 || col1 == 3 || col2 == 3
				|| col3 == 3 || diag1 == 3 || diag2 == 3) {
			ganador = "El ganador es el jugador 1";
			return ganador;
			
			
		} 
		else if (fil1 == -3 || fil2 == -3 || fil3 == -3 || col1 == -3
				|| col2 == -3 || col3 == -3 || diag1 == -3 || diag2 == -3) 
		{
			if (modoDeJuego == 2)
			{
				ganador = "El ganador es el jugador 2";
			}
				
			if (modoDeJuego == 1)
			{
				ganador = "El ganador es la maquina";
			}
				
			return ganador;
			
		}
		else 
		{
			ganador = "No hay ganadores, empate";
			return ganador;
		}
		
	}

	/**
	 * Metodo para terminar la partida y enviar el ganador obtenido en comprobarGanadorJugador
	 * @param botones lista de botones 
	 * @param texto texto donde se indica quien es ganador
	 * @return
	 */
	public boolean isTerminado(Botones[] botones, String texto) 
	{

		if (texto.equalsIgnoreCase("No hay ganadores, empate")) 
		{
			for (int i = 0; i < botones.length; i++) 
			{
				if (botones[i].isVacio())
					return false;
					
				
			}
		}
		return true;
	}
}
